package com.link_with_health.service;

import com.fasterxml.jackson.databind.ser.Serializers;
import com.link_with_health.exception.BaseException;
import com.link_with_health.model.DoctorEntity;
import com.link_with_health.model.DoctorStatusEntity;
import com.link_with_health.model.DrTitleEntity;

import java.util.List;

public interface DoctorService {

    /**
     * 通过医生id获取医生信息
     * @param drId 医生id
     * @return 医生信息
     * @throws BaseException 异常
     */
    DoctorEntity getDoctorsByDrId(Long drId) throws BaseException;

    /**
     * 通过用户id获取医生信息
     * @param userId 用户id
     * @return 医生信息
     * @throws BaseException 异常
     */
    DoctorEntity getDoctorsByUserId(Long userId) throws BaseException;

    /**
     * 通过医生名字获取医生信息
     * @param realName 名字
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByRealName(String realName) throws BaseException;

    /**
     * 通过医院获取医生信息
     * @param hospitalId 公司id
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByHospital(Long hospitalId) throws BaseException;

    /**
     * 通过职称获取医生信息
     * @param titleId 职称id
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByTitle(int titleId) throws BaseException;

    /**
     * 通过科室id获取医生信息 包含父级科室
     * @param departmentId 科室id
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByDepartmentIncPareDepart(Long departmentId) throws BaseException;

    /**
     * 通过科室id获取医生信息
     * @param departmentId 科室id
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByDepartment(Long departmentId) throws BaseException;

    /**
     * 通过状态筛选医生信息
     * @param status 状态id
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getDoctorsByStatus(int status) throws BaseException;

    /**
     * 获取医生信息
     * @return 医生信息
     * @throws BaseException 异常
     */
    List<DoctorEntity> getAllDoctors() throws BaseException;

    //
    List<DoctorEntity> searchDoctorsByNameOrHospitalName(String doctorName, String hospitalName) throws BaseException;

    /**
     * 修改医生信息
     * @param doctor 医生信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeDoctor(DoctorEntity doctor) throws BaseException;

    /**
     * 增加医生信息
     * @param doctor 医生信息
     * @return 改动数量
     * @throws BaseException
     */
    int addDoctor(DoctorEntity doctor) throws BaseException;

    /**
     * 删除医生信息
     * @param DrId 医生id
     * @return 改动数量
     * @throws BaseException 异常
     */
    int deleteDoctor(Long DrId) throws BaseException;

    /**
     * 通过获取状态信息
     * @param id 状态id
     * @return 状态信息
     * @throws BaseException 异常
     */
    DoctorStatusEntity getStatusById(int id) throws BaseException;

    /**
     * 通过状态名字获取状态信息
     * @param status 状态
     * @return 状态信息
     * @throws BaseException 异常
     */
    DoctorStatusEntity getStatusByStatus(String status) throws BaseException;

    /**
     * 通过医生id获取状态信息
     * @param doctorId id
     * @return 状态信息
     * @throws BaseException 异常
     */
    DoctorStatusEntity getStatusByDoctor(Long doctorId) throws BaseException;

    /**
     * 获取所有状态信息
     * @return 状态信息
     * @throws BaseException 异常
     */
    List<DoctorStatusEntity> getAllStatus() throws BaseException;

    /**
     * 更改状态信息
     * @param status 状态信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeStatus (DoctorStatusEntity status) throws BaseException;

    /**
     * 增加状态信息
     * @param status 状态信息
     * @return  改动数量
     * @throws BaseException 异常
     */
    int addStatus (DoctorStatusEntity status) throws BaseException;

    /**
     * 删除状态信息
     * @param statusId 状态信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int deleteStatus(int statusId) throws BaseException;

    /**
     * 通过职称id获取职称信息
     * @param id 职称id
     * @return 职称信息
     * @throws BaseException 异常
     */
    DrTitleEntity getTitleById(int id) throws BaseException;

    /**
     * 根据职称获取职称信息
     * @param titleName 职称名字
     * @return 职称信息
     * @throws BaseException 异常
     */
    DrTitleEntity getTitleByName(String titleName) throws BaseException;

    /**
     * 通过医生信息获取职称信息
     * @param doctorId 医生id
     * @return 职称信息
     * @throws BaseException 异常
     */
    DrTitleEntity getTitleByDoctorId(Long doctorId) throws BaseException;

    /**
     * 获取所有职称信息
     * @return 职称信息
     * @throws BaseException 异常
     */
    List<DrTitleEntity> getAllTitle() throws BaseException;

    /**
     * 更改职称信息
     * @param title 职称信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeTitle(DrTitleEntity title) throws BaseException;

    /**
     * 增加职称信息
     * @param title 职称信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int addTitle(DrTitleEntity title) throws BaseException;

    /**
     * 删除职称信息
     * @param titleId 职称
     * @return 改动数量
     * @throws BaseException
     */
    int deleteTitle(int titleId) throws BaseException;

 }
